package com.technology.javase;
/**静态变量和实例变量*/
//该 variable 类中有：5个字段、3个可读写属性、5个成员变量、1个局部变量、3个实例变量、1个静态变量(类变量) 和 1个常量 。
public class variable {
    //成员变量包括：常量 、静态变量( 又叫类变量 ) 和 实例变量( 又叫对象变量 ) 。

        /*属性
        * 属性是只局限于类中 方法 的声明，不与其他的类成员相关。只与类中的 get() /set() 方法有关。
        * 如果类中有这样的 getX()/setX() 方法，我们就可以说类中有可以读写的x属性(如果 getXY()/setXY()方法后面的Y是小写，就叫xy属性，如果Y是大写，就叫XY属性)
        * */

        private int Id;//成员变量(字段)、实例变量(表示该Id变量既属于成员变量，又属于实例变量)
        private String name;//成员变量(字段)、实例变量
        public int age;//成员变量(字段)、实例变量(这里用来举例子,在实际中一般都会设置为private)

        private static String height = "个子很高";//成员变量、类变量(静态变量)
        public static final String mood = "开心";//成员变量(公共字段)、常量(被 static final 修饰)、静态常量

        //方法
        public void study() {//普通方法
            String study = "learning";//局部变量
        }

        public int getId() {//id的可读属性
            return Id;
        }
        public void setId(int id) {//id的可写属性
            Id = id;
        }
        public String getName() {//name的可读属性
            return name;
        }
        public void setName(String name) {//name的可写属性
            this.name = name;
        }
        public int getAge() {//age的可读属性
            return age;
        }
        public void setAge(int age) {//age的可写属性
            this.age = age;
        }
}

    class constant{
    //在方法中调用 variable 的 字段
        public static void main(String[] args) {
            //实例变量 不用 static 修饰的成员变量，随对象的创建而创建，每个对象都有自己的独有的实例变量，属于对象私有。
            //实例变量属于某个对象的属性，必须创建了实例对象，其中的实例变量才会被分配空间，才能使用这个实例变量
            //调用要实例化对象，用 对象名.实例变量名 才可以调用，
            variable aa =  new variable();
            aa.getAge();
            aa.setId(3);
            aa.getName();

            //静态变量 被 static 修饰 。一个类里只有一份，属于对象共有，调用是一般用 类名.静态变量名 就可以调用
            //静态变量不属于某个实例对象，而是属于类，所以也称为类变量，只要程序加载了类的字节码，不用创建任何实例对象，静态变量就会被分配空间，静态变量就可以被使用了
            variable.mood.length();
            variable.mood.toString();
        }

}
